function [fValue] = dispLoss(pvObs, pvPre, misfitType)
%% 频散曲线损失函数,计算有多列，pvPredicted只有一列时候的误差
% 输入参数
% pvObserved: 观测的频散曲线（非零点有效）
% pvPredicted：预测的理论频散曲线
% misfitType：误差类型，'L1' 或 'L2'

% 输出参数
% fValue：误差值

% @author:夜剑听雨
% E-mail:2530595378@qq.com
% 2025.08.29

% 生成二值采样掩码0或1
valid = pvObs ~= 0;
pre = pvPre(valid);
obs = pvObs(valid);
if strcmpi(misfitType, 'L1')
    fValue = sum(abs(obs - pre));
else
    fValue = sum((obs - pre).^2);
    
end

% 计算有效非零值数
dataPointNum = sum(valid);
fValue = sqrt(fValue/dataPointNum);
if dataPointNum == 0
    error('No valid data points.');
end

end
